﻿package main

import "fmt"

func main() {
    var a [5]int = [...]int{1,2,3,4,5}  // 定义一个数组
    s := a[:]  // 切片引用这个数组
    a[1] = 22  // 修改数组的元素，切片也会受影响
    fmt.Printf("%p %p %v\n", &a, s, s)  // 打印切片和数组的地址，是一样的
    s = s[: len(s)-1]
    fmt.Printf("%p %p %v\n", &a, s, s)
    s = append(s, 6)  // 切片里追加一个元素
    fmt.Printf("%p %p %v\n", &a, s, s)
    s = append(s, 6)  // 这次追加会导致切片超出数组的边界
    a[2] = 33  // 现在改数组，影响不到切片了
    fmt.Printf("%p %p %v\n", &a, s, s)
    fmt.Println(a)
}